<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function Star(name, age){
            this.name = name 
            this.age = age 
        }
        // 公共方法写在原型上
        Star.prototype.sing = function(){
            console.log('我会唱歌')
        }
        const ldh = new Star('刘德华', 18)
        ldh.sing()

        // 1. 方法属性的查找规则 
        // 首先看ldh这个对象身上是否有sing方法，如果有，就执行对象上的这个方法。
        // 如果没有sing这个方法，就会通过__proto__去实例的原型上查找。

        // 2. __proto__隐式原型
        // 实例通过__proto__ 访问（链接）到了它的原型对象
        // ==>  ldh.__proto__  ===> 访问到了原型
        // ==>  Star.prototype ===> 访问到了原型
        ldh.__proto__ === Star.prototype

        // 3. __proto__ 它就相当于是一个桥梁， 我们创建的实例、对象，可以通过它访问原型。
        // 表示 实例与原型(对象)之间的一个关系
        // ldh（实例）   ===>    Star.prototype (原型)


        // ==>  实例对象.__proto__ === 构造函数.prototype
    </script>
</body>
</html>